/**
 * 1664. 生成平衡数组的方案数
 * @param {number[]} nums
 * @return {number}
 */
// 动态规划
var waysToMakeFair = function (nums) {
	let odd1 = 0,
		even1 = 0
	let odd2 = 0,
		even2 = 0
	for (let i = 0; i < nums.length; i++) {
		if (i & 1) {
			odd2 += nums[i]
		} else {
			even2 += nums[i]
		}
	}
	let res = 0
	for (let i = 0; i < nums.length; i++) {
		if (i & 1) {
			odd2 -= nums[i]
		} else {
			even2 -= nums[i]
		}
		if (odd1 + even2 === odd2 + even1) res++
		if (i & 1) {
			odd1 += nums[i]
		} else {
			even1 += nums[i]
		}
	}

	return res
}
/*
    把 odd1 + even2 == odd2 + even1 变形得 odd1 - even1 === odd2 - even2
    这样可以简化成两个变量 s1  = odd1 - even1 和 s2 = odd2 - even2 
    如果 s1 === s2 答案就 +1。s1 和 s2 的更新就是 i 为奇数加，偶数减
    再变形 s1 - s2 === 0 那么令 s = s1 - s2 当 s === 0 时，答案就加 1
*/
var waysToMakeFair = function (nums) {
	let ans = 0,
		s = 0,
		n = nums.length
	for (let i = 0; i < n; i++) {
		s += i & 1 ? nums[i] : -nums[i]
	}
	for (let i = 0; i < n; i++) {
		s -= i & 1 ? nums[i] : -nums[i]
		ans += s === 0
		s -= i & 1 ? nums[i] : -nums[i]
	}

	return ans
}
